package com.zenithmind.exam.pojo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.math.BigDecimal;

/**
 * 题目实体类
 * 
 * @author ZenithMind
 * @since 2024-07-01
 */
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Schema(name = "题目实体", description = "题目信息")
@TableName("exam_question")
public class Question extends BaseEntity {

    /**
     * 题库ID
     */
    @NotBlank(message = "题库ID不能为空")
    @Schema(description = "题库ID")
    private String bankId;

    /**
     * 题目标题
     */
    @NotBlank(message = "题目标题不能为空")
    @Size(max = 500, message = "题目标题长度不能超过500个字符")
    @Schema(description = "题目标题")
    private String title;

    /**
     * 题目内容
     */
    @NotBlank(message = "题目内容不能为空")
    @Schema(description = "题目内容")
    private String content;

    /**
     * 题目类型（1:单选题, 2:多选题, 3:填空题, 4:简答题, 5:判断题）
     */
    @NotNull(message = "题目类型不能为空")
    @Schema(description = "题目类型（1:单选题, 2:多选题, 3:填空题, 4:简答题, 5:判断题）")
    private Integer type;

    /**
     * 难度等级（1:简单, 2:中等, 3:困难）
     */
    @Schema(description = "难度等级（1:简单, 2:中等, 3:困难）")
    private Integer difficulty;

    /**
     * 题目分值
     */
    @Schema(description = "题目分值")
    private Integer score;

    /**
     * 选项（JSON格式，适用于选择题）
     */
    @Schema(description = "选项（JSON格式，适用于选择题）")
    private String options;

    /**
     * 正确答案（JSON格式）
     */
    @NotBlank(message = "正确答案不能为空")
    @Schema(description = "正确答案（JSON格式）")
    private String correctAnswer;

    /**
     * 答案解析
     */
    @Schema(description = "答案解析")
    private String explanation;

    /**
     * 标签（JSON格式）
     */
    @Schema(description = "标签（JSON格式）")
    private String tags;

    /**
     * 图片URLs（JSON格式）
     */
    @Schema(description = "图片URLs（JSON格式）")
    private String imageUrls;

    /**
     * 附件URLs（JSON格式）
     */
    @Schema(description = "附件URLs（JSON格式）")
    private String attachmentUrls;

    /**
     * 状态（0:禁用, 1:启用, 2:审核中）
     */
    @Schema(description = "状态（0:禁用, 1:启用, 2:审核中）")
    private Integer status;

    /**
     * 使用次数
     */
    @Schema(description = "使用次数")
    private Long useCount;

    /**
     * 正确次数
     */
    @Schema(description = "正确次数")
    private Long correctCount;

    /**
     * 正确率
     */
    @Schema(description = "正确率")
    private BigDecimal correctRate;
}
